精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。需要全文内容也请联系孙老师。
Can’t undef active subroutine at
/usr/apps/lib/perl5/site_perl/5.005/aix/Apache/Registry.pm line 102.
Called from package Apache::Registry, filename
/usr/apps/lib/perl5/site_perl/5.005/aix/Apache/Registry.pm, line 102
This problem is caused when a client drops the connection while httpd is in the middle of a write. httpd times out, sending a SIGPIPE, and Perl (in that child) is stuck in the middle of its eval context. This is fixed by the Apache::SIG module which is called by default. This should not happen unless you have code that is messing with $SIG{PIPE}. It’s also triggered only when you’ve changed your script on disk and mod_perl is trying to reload it.
这个问题是当客户端断开连接而引起的,这是httpd是写在中间,httpd暂停,发送SIGPIPE并且Perl(在子程序中)是夹在eval上下文之间。这是固定的Apache::SIG模块在默认情况下被调用。这应该不会发生,除非你有代码干扰$SIG{PIPE}。这也引发了只有当你在磁盘上改变你的脚本并且mod_perl正试图重新加载它。
From mod_perl.pod: With Apache versions 1.3.0 and higher, mod_perl will call the perl_destruct() Perl API function during the child exit phase. This will cause proper execution of END blocks found during server startup as well as invoking the DESTROY method on global objects which are still alive. It is possible that this operation may take a long time to finish, causing problems during a restart. If your code does not contain any END blocks or DESTROY methods which need to be run during child server shutdown, this destruction can be avoided by setting the PERL_DESTRUCT_LEVEL environment variable to -1. Be aware that ‘your code’ includes any modules you use and they may well have DESTROY and END blocks...
从mod_perl.pod::和Apache1.3.0版本或者更高的版本,mod_perl将在子程序的退出阶段调用perl_destruct Perl()API函数。这将导致适当的执行结束时发现块服务器启动以及调用全局对象的销毁方法仍然活着。该操作可能需要很长时间才能完成,这很可能在重启时产生问题。如果您的代码不含任何END blocks或DESTROY的方法,需要在子服务器关闭的时候运行,这个破坏可以通过设置PERL_DESTRUCT_LEVEL环境变量为-1来避免。要知道“你的代码”包括任何模块,他们很有可能有DESTROY和 END blocks.……
If you see a process stuck in "G" (Gracefully finishing) after a doing a graceful restart (sending kill -SIGUSR1) it means that the process is hanging in perl_destruct() while trying to cleanup. This cleanup normally isn’t a requirement, you can disable it by setting the PERL_DESTRUCT_LEVEL environment variable to -1.
做一个优雅重启(发送kill -SIGUSR1)后,如果你看到一个进程陷入“G”(优雅完成)这意味着这个过程是阻塞在perl_destruct()里了,它正在试图清理。这清理通常不是必须的,你可以通过设置PERL_DESTRUCT_LEVEL环境变量为-1禁用它。